#include <iostream>
#include <fstream>
#include <vector>
#include <string.h>
#include <set>
#include <list>

using namespace std;
	
class FileTree{
	private:
		wstring root_directory;
	public:
		void AddFile(const wstring& i_file_name);
		const wstring& GetDirectory();
		void RemoveDirectory(const wstring& i_directory_name);
		FileTree(const wstring& i_root_directory);
		~FileTree();//deleting all folders and files from windows
};

class FileHashTree{
	private:
		long int acceptable_size_in_memory;
		set<long int, less<long int>> hash_tree;
		wstring file_with_hashes;
	public:
		bool ifIn(const int& i_hash_value);
		void  add (const int& i_hash_value);
        FileHashTree(const wstring& i_file_with_hashes);
		~FileHashTree();//deleting all folders and files from windows
};

class Result{
	private:
		wstring file_where_to_keep;
	public:
		Result(list<list<const wstring&>> i_result_list);
};

class FileOrginizer{
	private:
		FileTree file_tree(L"Current Tree Directory");
    public:
		void FindAllFilesStartingFrom(const wstring& i_root_directory);//here we create and delete 
        void FindAllDuplicateFiles(const Result& i_result);
};



